import router, { anyRoute } from './index'
import store from '@/store/index.js'
import { getRouteList } from '@/utils/handlerMenuList.js'

const whiteList = ['/login']

router.beforeEach(async (to, from, next) => {
  // 从vuex中获取token
  if (store.getters.token) {
    if (to.path === '/login') {
      // 如果登录过还要跳转到登录页则放行到首页
      next('/')
    } else {
      // 这个地方最好是先获取当前用户的角色来判断，因为后期修改菜单需要根据当前角色菜单权限刷新菜单
      if (store.getters.returnUserMenuList.length === 0) {
        try {
          await store.dispatch('app/getMenuListAndButtonLists')
          // 这里需要二次判断返回的是不是空，如果是说明无需生成动态路由，放行即可
          if (store.getters.returnUserMenuList.length === 0) {
            next()
          } else {
            const userMenuList = getRouteList(store.getters.returnUserMenuList)
            addDynamicRouting(userMenuList, anyRoute)
            next({ path: `${to.path}` })
          }
        } catch (error) {
          // 当发生token失效情况
          console.log(error)
          // 派发退出登陆
          store.dispatch('app/logout')
          // 重置state
          await store.commit('app/resetState')
          next({ path: `${to.path}` })
          // next({ path: `/login?redirect:${to.path}` })
        }
      } else {
        next()
      }
    }
  } else {
    // 没有登陆过的情况
    if (whiteList.includes(to.path)) {
      next()
    } else {
      next('/login')
    }
  }
})

// 动态增加路由到"/"的子路由中
// routes = [{xxx,children:[{xxx}]},{xxx,children:[{xxx}]}] 只需要遍历第一层添加即可
function addDynamicRouting(userMenuList, anyRoute) {
  // 获取需要的userMenuList(只需要其中三个参数，这个三个参数都需要处理后添加)
  userMenuList.forEach((item) => {
    router.addRoute('/', item)
  })
  router.addRoute(anyRoute)
}
